﻿Public Class SOFTWAREGROUPCLASS
    ''' <summary>
    ''' ติดต่อฐานข้อมูล
    ''' </summary>
    Dim connect As CONDB = CONDB.NewConnection()

    ''' <summary>
    ''' select ข้อมูลกลุ่มโปรแกรมทั้งหมดจาก masgrpprg
    ''' </summary>
    Private selectSoftwaregroup As String = "SELECT `gprgid` AS 'รหัสกลุ่มโปรแกรม', `gprgname` AS 'ชื่อกลุ่มโปรแกรม', `status` AS 'สถานะการเปิดใช้งาน' FROM masgrpprg"
    ''' <summary>
    ''' select ข้อมูลโปรแกรมทั้งหมดจาก masprg
    ''' </summary>
    Private selectMasprg As String = "SELECT `prgid` AS 'idโปรแกรม', `prgcode` AS 'โค้ดโปรแกรม', `prgname` AS 'ชื่อโปรแกรม', `status` AS 'สถานะการเปิดใช้งาน' FROM masprg"

    ''' <summary>
    ''' Property selectSoftwaregroup
    ''' </summary>
    Public Property selectSoftwaregroup_ As String
        Get
            Return selectSoftwaregroup
        End Get
        Set(value As String)
            selectSoftwaregroup = value
        End Set
    End Property

    ''' <summary>
    ''' Property selectMasprg
    ''' </summary>
    Public Property selectMasprg_ As String
        Get
            Return selectMasprg
        End Get
        Set(value As String)
            selectMasprg = value
        End Set
    End Property

    ''' <summary>
    ''' ID โปรแกรม (Primary Key)
    ''' </summary>
    ''' <remarks>Primary Key จาก table masprg</remarks>
    ''' -----------------masprg---------------------
    Private PRGID As Integer = Nothing
    ''' <summary>
    ''' รหัสโปรแกรม (ไม่ใช่ Primary Key)
    ''' </summary>
    Private PRGCODE As String = Nothing
    ''' <summary>
    ''' ชื่อโปรแกรม
    ''' </summary>
    ''' <remarks>มาจาก table masprg</remarks>
    Private PRGNAME As String = Nothing
    ''' <summary>
    ''' สถานะการเปิดใช้งานของตัวโปรแกรม
    ''' </summary>
    ''' <remarks>มาจาก masprg</remarks>
    Private masprgSTATUS = Nothing

    ''' <summary>
    ''' Property PRGID
    ''' </summary>
    Public Property PRGID_ As Integer
        Get
            Return PRGID
        End Get
        Set(value As Integer)
            PRGID = value
        End Set
    End Property

    ''' <summary>
    ''' Property PRGCODE
    ''' </summary>
    Public Property PRGCODE_ As String
        Get
            Return PRGCODE
        End Get
        Set(value As String)
            PRGCODE = value
        End Set
    End Property

    ''' <summary>
    ''' Property PRGNAME
    ''' </summary>
    Public Property PRGNAME_ As String
        Get
            Return PRGNAME
        End Get
        Set(value As String)
            PRGNAME = value
        End Set
    End Property

    ''' <summary>
    ''' Property masprgStatus
    ''' </summary>
    Property masprgSTATUS_ As Boolean
        Get
            Return masprgSTATUS
        End Get
        Set(value As Boolean)
            If value = True Then
                masprgSTATUS = 1
            Else
                masprgSTATUS = 0
            End If
        End Set
    End Property

    ''' <summary>
    ''' รหัสกลุ่มโปรแกรม
    ''' </summary>
    ''' <remarks>Primary Key ของ table masgrpprg</remarks>
    ''' ------------------masgrpprg-----------------------
    Private GPRGID As String = Nothing
    ''' <summary>
    ''' ชื่อกลุ่มโปรแกรม
    ''' </summary>
    ''' <remarks>มาจาก table masgrpprg</remarks>
    Private GPRGNAME As String = Nothing
    ''' <summary>
    ''' สถานะการเปิดใช้งานของกลุ่มโปรแกรม table masgrpprg
    ''' </summary>
    Private masgrpprgSTATUS = Nothing

    ''' <summary>
    ''' Property GPRGID
    ''' </summary>
    Public Property GPRGID_ As String
        Get
            Return GPRGID
        End Get
        Set(value As String)
            GPRGID = value
        End Set
    End Property

    ''' <summary>
    ''' Property  GPRGNAME
    ''' </summary>
    Public Property GPRGNAME_ As String
        Get
            Return GPRGNAME
        End Get
        Set(value As String)
            GPRGNAME = value
        End Set
    End Property

    ''' <summary>
    ''' Property masgrpprgStatus
    ''' </summary>
    Property masgrpprgSTATUS_ As Boolean
        Get
            Return masgrpprgSTATUS
        End Get
        Set(value As Boolean)
            If value = True Then
                masgrpprgSTATUS = 1
            Else
                masgrpprgSTATUS = 0
            End If
        End Set
    End Property

    ''' <summary>
    ''' ID พนักงาน
    ''' </summary>
    ''' <remarks>Primary Key table hospemp</remarks>
    ''' --------------set Permission by Group----------------
    Private EMPID As String = Nothing

    ''' <summary>
    ''' Property EMPID
    ''' </summary>
    Public Property EMPID_ As Integer
        Get
            Return EMPID
        End Get
        Set(value As Integer)
            EMPID = value
        End Set
    End Property

    ''' <summary>
    ''' เพิ่มรายชื่อโปรแกรม
    ''' </summary>
    ''' <remarks>input: property ใน class ได้แก่ PRGNAME, PRGCODE, masprgSTATUS</remarks>
    ''' <returns>
    ''' Boolean
    ''' TRUE กรณีเพิ่มสำเร็จ
    ''' FALSE กรณีเพิ่มไม่สำเร็จ
    ''' </returns>
    Public Function insertMasprg() As Boolean
        If connect.GetTable("SELECT prgid FROM masprg WHERE prgname = '" & PRGNAME & "' OR prgcode = '" & PRGCODE & "'").Rows.Count > 0 Then
            MsgBox("ไม่สามารถเพิ่มรายชื่อโปรแกรมนี้เข้าสู่ระบบได้ เนื่องจากมีชื่อหรือรหัสโปรแกรมนี้อยู่ในระบบแล้ว")
        Else
            Try
                connect = CONDB.NewConnection()
                connect.ExecuteNonQuery("INSERT INTO masprg (prgcode, prgname, status) VALUES ('" & PRGCODE & "', '" & PRGNAME & "', '" & masprgSTATUS & "')")
                'MsgBox("ท่านได้ทำการเพิ่มรายชื่อโปรแกรมเรียบร้อยแล้ว")

                Return True
            Catch ex As Exception
                MsgBox(vbCrLf & ex.Message)
                Return False
            End Try
            connect.Dispose()
        End If
    End Function

    ''' <summary>
    ''' แก้ไขข้อมูล โปรแกรม
    ''' </summary>
    ''' <remarks>input: property ใน class ได้แก่ PRGCODE, PRGNAME, masprgSTATUS, PRGID</remarks>
    ''' <returns>
    ''' boolean
    ''' TRUE กรณีที่แก้ไขสำเร็จ
    ''' FALSE กรณีแก้ไขไม่สำเร็จ
    ''' </returns>
    Public Function editMasprg() As Boolean
        Try
            connect = CONDB.NewConnection()

            connect.ExecuteNonQuery("UPDATE masprg SET prgcode = '" & PRGCODE & "', prgname = '" & PRGNAME & "', status = '" & masprgSTATUS & "' WHERE prgid = '" & PRGID & "'")
            'MsgBox("ท่านได้ทำการแก้ไขรายชื่อโปรแกรมเรียบร้อยแล้ว")

            connect.Dispose()
            Return True
        Catch ex As Exception
            MsgBox(vbCrLf & ex.Message)
            connect.Dispose()
            Return False
        End Try
    End Function


    ''' <summary>
    ''' เพิ่มกลุ่มโปรแกรม
    ''' </summary>
    ''' <remarks>input: property ใน class ได้แก่ GPRGID, GPRGNAME, masgrpprgSTATUS</remarks>
    ''' <returns>
    ''' Boolean
    ''' TRUE กรณีแก้สำเร็จ
    ''' FALSE กรณีแก้ไม่สำเร็จ
    ''' </returns>
    Public Function insertMasgrpprg() As Boolean
        If connect.GetTable("SELECT gprgid FROM masgrpprg WHERE gprgname = '" & GPRGNAME & "' OR gprgid = '" & GPRGID & "'").Rows.Count > 0 Then
            MsgBox("ไม่สามารถเพิ่มกลุ่มโปรแกรมนี้เข้าสู่ระบบได้ เนื่องจากมีกลุ่มโปรแกรมนี้อยู่ในระบบแล้ว")
        Else
            Try
                connect = CONDB.NewConnection()

                connect.BeginTrans()
                Dim sql As String = "INSERT INTO masgrpprg (gprgid, gprgname, status) VALUES ('" & GPRGID & "', '" & GPRGNAME & "', '" & masgrpprgSTATUS & "');"
                connect.ExecuteNonQuery(sql)
                'MsgBox("ท่านได้ทำการเพิ่มกลุ่มโปรแกรมเรียบร้อยแล้ว")
                connect.CommitTrans()
                Return True
            Catch ex As Exception
                connect.RollbackTrans()
                MsgBox(vbCrLf & ex.Message)
                Return False
            End Try
            connect.Dispose()
        End If
    End Function

    ''' <summary>
    ''' แก้ไขรายละเอียดกลุ่มโปรแกรม
    ''' </summary>
    ''' <remarks>input: property ใน class ได้แก่ GPRGNAME, masgrpprgSTATUS, GPRGID</remarks>
    ''' <returns>
    ''' boolean
    ''' TRUE ในกรณีที่แก้ไขสำเร็จ
    ''' FALSE ในกรณีที่แก้ไขไม่สำเร็จ
    ''' </returns>
    Public Function editMasgrpprg() As Boolean
        Try
            connect = CONDB.NewConnection()

            connect.ExecuteNonQuery("UPDATE masgrpprg SET gprgname = '" & GPRGNAME & "', status = '" & masgrpprgSTATUS & "' WHERE gprgid = '" & GPRGID & "'")
            connect.Dispose()

            Return True
        Catch ex As Exception
            connect.Dispose()
            MsgBox(vbCrLf & ex.Message)
            Return False
        End Try

    End Function


    ''' <summary>
    ''' รหัสกลุ่มโปรแกรม (ไม่ได้ใช้แล้ว)
    ''' </summary>
    ''' -----------------grpprglst----------------------
    ''' ใช้เพื่อ edit ลงใน grpprglst ที่ใช้ join โปรแกรมกับกลุ่มโปรแกรม
    Private GPLSTID As Integer = Nothing
    ''' <summary>
    ''' สถานะการเปิดใช้งานของ grpprglst (table นี้ไม่ใช้แล้ว)
    ''' </summary>
    Private grpprglstStatus = Nothing

    ''' <summary>
    ''' Property GPLSTID
    ''' </summary>
    Public Property GPLSTID_ As Integer
        Get
            Return GPLSTID
        End Get
        Set(value As Integer)
            GPLSTID = value
        End Set
    End Property

    ''' <summary>
    ''' Property  grpprglstStatus
    ''' </summary>
    Property grpprglstStatus_ As Boolean
        Get
            Return grpprglstStatus
        End Get
        Set(value As Boolean)
            If value = True Then
                grpprglstStatus = 1
            Else
                grpprglstStatus = 0
            End If
        End Set
    End Property

    ''' <summary>
    ''' เพิ่มกลุ่มโปรแกรม (ไม่ใช้แล้ว)
    ''' </summary>
    ''' <remarks>input: property ใน class ได้แก่ PRGCODE, PRGNAME, masprgSTATUS, PRGID</remarks>
    ''' <returns>
    ''' Boolean
    ''' TRUE เมื่อเพิ่มข้อมูลสำเร็จ
    ''' FALSE เมื่อเพิ่มข้อมูลไม่สำเร็จ
    ''' </returns>
    Public Function insertGrpprglst() As Boolean
        If connect.GetTable("SELECT gplstid FROM grpprglst WHERE gprgid = '" & GPRGID & "' AND prgid = '" & PRGID & "'").Rows.Count > 0 Then
            MsgBox("ไม่สามารถเพิ่มกลุ่มโปรแกรมเข้ากลุ่มได้ เนื่องจากโปรแกรมอยู่ในกลุ่มดังกล่าวแล้ว")
        Else
            Try
                connect = CONDB.NewConnection()
                connect.ExecuteNonQuery("INSERT INTO grpprglst (gprgid, prgid, status) VALUES ('" & GPRGID & "', '" & PRGID & "', '" & grpprglstStatus & "')")
                'MsgBox("ท่านได้ทำการเพิ่มโปรแกรมเข้ากลุ่มเรียบร้อยแล้ว")

                Return True
            Catch ex As Exception
                MsgBox(vbCrLf & ex.Message)
                Return False
            End Try
            connect.Dispose()
        End If
    End Function

    ''' <summary>
    ''' แก้ไขการจับคู่โปรแกรมกับกลุ่มโปรแกรม (ไม่ใช้แล้ว)
    ''' </summary>
    ''' <remarks>input: property ใน class ได้แก่ GPRGID, PRGID, grpprglstStatus, GPLSTID</remarks>
    Public Function editGrpprglst() As Boolean
        Try
            connect = CONDB.NewConnection()
            connect.ExecuteNonQuery("UPDATE grpprglst SET gprgid = '" & GPRGID & "', prgid = '" & PRGID & "', status = '" & grpprglstStatus & "' WHERE gplstid = '" & GPLSTID & "'")
            'MsgBox("ท่านได้ทำการแก้ไขการจับกลุ่มโปรแกรมเรียบร้อยแล้ว")

            Return True
        Catch ex As Exception
            MsgBox(vbCrLf & ex.Message)
            Return False
        End Try
        connect.Dispose()
    End Function

    ''' <summary>
    ''' set permission ให้กับ user และโปรแกรม
    ''' </summary>
    ''' <remarks>
    ''' input: property ใน class ได้แก่ GPRGID, EMPID, 
    ''' วนลูป เพิ่มหรือแก้ไข permission ให้กับ user
    ''' </remarks>
    ''' <returns>
    ''' boolean
    ''' TRUE ถ้าแก้ไขหรือเพิ่มสำเร็จ
    ''' FALSE ถ้าแก้ไขหรือเพิ่มสำเร็จ
    ''' </returns>
    Public Function setPermissionByGroupprg() As Boolean
        Dim prgInGroupNum As Integer = connect.GetTable("SELECT grppolid FROM grppolicy WHERE gprgid = '" & GPRGID & "'").Rows.Count
        Dim dt As DataTable = connect.GetTable("SELECT prgid, padd, pdel, pupd, pprt, psee FROM grppolicy WHERE gprgid = '" & GPRGID & "'")
        Dim sql As String = ""

        If prgInGroupNum = 0 Then
            MsgBox("ไม่สามารถเพิ่มสิทธิ์ด้วยการใช้กลุ่มได้ เนื่องจากกลุ่มโปรแกรมที่ท่านเลือกยังไม่มีข้อมูลสิทธิ์")
            Return False
        Else
            connect.BeginTrans()

            'connect.ExecuteNonQuery("DELETE FROM usrpolicy WHERE EMPID = '" & EMPID & "'")

            For i As Integer = 0 To prgInGroupNum - 1
                If connect.GetTable("SELECT upid FROM usrpolicy WHERE empid = '" & EMPID & "' AND prgid = '" & dt.Rows(i)("PRGID") & "'").Rows.Count = 0 Then
                    sql += "INSERT INTO usrpolicy (empid, prgid, padd, pdel, pupd, pprt, psee, `status`) VALUES ('" & EMPID & "', '" & dt.Rows(i)("PRGID") & "', '" & dt.Rows(i)("PADD") & "', '" & dt.Rows(i)("PDEL") & "', '" & dt.Rows(i)("PUPD") & "', '" & dt.Rows(i)("PPRT") & "', '" & dt.Rows(i)("PSEE") & "', '1');"
                ElseIf connect.GetTable("SELECT upid FROM usrpolicy WHERE empid = '" & EMPID & "' AND prgid = '" & dt.Rows(i)("PRGID") & "'").Rows.Count > 0 Then
                    sql += "UPDATE usrpolicy SET padd = '" & dt.Rows(i)("PADD") & "', pdel = '" & dt.Rows(i)("PDEL") & "', pupd = '" & dt.Rows(i)("PUPD") & "', pprt = '" & dt.Rows(i)("PPRT") & "', psee = '" & dt.Rows(i)("PSEE") & "', `status` = '1' WHERE EMPID = '" & EMPID & "' AND prgid = '" & dt.Rows(i)("PRGID") & "';"
                End If
            Next

            Try
                connect.ExecuteNonQuery(sql)
                connect.CommitTrans()
                Return True
            Catch ex As Exception
                connect.RollbackTrans()
                MsgBox(ex.ToString)
                Return False
            End Try
        End If

    End Function
End Class
